package org.huangrui.juc.source.locks;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 模拟3个售票员卖完50张票
 * @Author hr
 * @Create 2024-04-02 02:25
 */
public class T03_SaleTicket {
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread(() -> { for (int i = 0; i < 55; i++) ticket.sale();}, "a").start();
        new Thread(() -> { for (int i = 0; i < 55; i++) ticket.sale();}, "b").start();
        new Thread(() -> { for (int i = 0; i < 55; i++) ticket.sale();}, "c").start();
    }
}

class Ticket // 资源类
{
    private int number = 50;
    // Object lockObject = new Object();
    // public void sale(){
    //     synchronized (lockObject) {
    //         if(number > 0){
    //             System.out.println(Thread.currentThread().getName()+"卖出第：\t"+(number--)+"\t 还剩下:"+number);
    //         }
    //     }
    // }
    Lock lock = new ReentrantLock(true);

    public void sale() {
        lock.lock();
        try {
            if (number > 0) {
                System.out.println(Thread.currentThread().getName() + "卖出第：\t" + (number--) + "\t 还剩下:" + number);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}